/**
 * 路由权限控制
 */
import NProgress from'nprogress';
import 'nprogress/nprogress.css';
import router from"./index.js";
import {AuthUtil} from "../util/auth.js";
import store from "../store/index.js";

/**
 * 进度条配置
 */
NProgress.configure({
    // 动画方式
    easing: 'ease',
    // 关闭旋转圈圈
    showSpinner: false,
});

/**
 * 路由白名单，这些路由不需要判断token是否存在
 */
const whiteUrl = ['/login','/logout','/demo23']; //,'/demo23','/demo23/main'

/**
 * 路由前置守卫
 */
router.beforeEach((to, from, next) => {
    console.log('0000',to.path)
    // 开启进度条
    NProgress.start();
    // 判断是否存在token信息
    if(AuthUtil.getToken()){
        if (to.path == '/login'){
            console.log('----',to.path)
            // todo 这里根据实际应用程序跳转的来写
            console.log('1111',to.path)
            next('/main');
        }else {
            console.log('2222',to.path)
            // 判断用户的菜单列表数据是否为空，如果为空则从后端获取菜单列表数据
            // if (!(store.getters.menuList == null || store.getters.menuList.length == 0)){
            //     console.log('33333',to.path)
            //     next();
            // }

            //访问的不是登录页面，则从后端获取菜单列表数据
            store.dispatch('login/getUserMenuList').then((res) => {
                console.log('获取用户菜单列表数据完成',res)
                //菜单获取成功，跳转到对应的界面
                next();
            }).catch(reject=>{
                console.log('获取用户菜单列表数据失败',reject)
                //获取菜单数据失败，清空localStorage,并且跳转到登录页面
                localStorage.clear()
                next('/demo23');
            })

        }
    }else {
        console.log('4444',to.path)
        // 不存在token信息的情况下，判断当前路由是否在白名单里面
        if (whiteUrl.includes(to.path)) {
            // 在白名单里面，直接跳转到对应的界面
            console.log('55555',to.path)
            next();
        } else {
            // 不在白名单里面，跳转到登录页
            console.log('66666',to.path)
            next('/demo23');
        }
    }


    next();
});

/**
 * 路由后置守卫
 */
router.afterEach((to, from) => {
    // 关闭进度条
    NProgress.done();
});